/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.Riesgo;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import org.json.JSONObject;
import org.json.JSONArray;

/**
 *
 * @author Hector Gutierrez
 */
public class Riesgo_DAO {

    public static JSONObject consultarRiesgos(Riesgo rgo, String limit, String offset, String order, String asc) {
        ConexionBD conex = new ConexionBD();
        JSONObject riesgos = new JSONObject();

        try {
            String query = "SELECT * FROM riesgo  ";
            String params = "WHERE (1=1) ";
            if (rgo.getNombre() != null && !rgo.getNombre().equals("")) {
                params += "and upper(nombre) LIKE '%" + rgo.getNombre().toUpperCase() + "%' ";
            }
            if (rgo.getNombreRiesgo() != null && !rgo.getNombreRiesgo().equals("")) {
                params += "and nombre_riesgo = '" + rgo.getNombreRiesgo() + "' ";
            }

            String format = " ";
            if (order != null && !order.equals("")) {
                format += " order by " + order;
                if (asc != null && !asc.equals("") && asc.equals("false")) {
                    format += " desc";
                } else {
                    format += " asc";
                }
            }

            if (limit != null && !limit.equals("")) {
                format += " limit " + limit;
            }
            if (offset != null && !offset.equals("")) {
                format += " offset " + offset;
            }

            System.out.println(query + params + format);
            Statement st = (Statement) conex.session.createStatement();
            ResultSet rs = st.executeQuery(query + params + format);
            int i = 0;
            JSONArray ja = new JSONArray();
            while (rs.next()) {
                JSONObject r = new JSONObject();
                r.put("nombre", rs.getString(1));
                r.put("tipo", rs.getString(2));
                r.put("descripcion", rs.getString(3));
                r.put("senalizacion", rs.getString(4));
                ja.put(i++, r);
            }

            riesgos.put("Riesgos", ja);

            query = "select count(*) from riesgo ";
            System.out.println(query + params);
            rs = st.executeQuery(query + params);
            if (rs.next()) {
                riesgos.put("tam", rs.getString(1));
            }
        } catch (Exception e) {
            System.out.println("Error consultando riesgos: " + e.getMessage());
        } finally {
            if (conex != null) {
                conex.cerrarConexion();
            }
        }
        return riesgos;
    }

    public Riesgo_DAO() {
    }

    public static JSONArray consultarRiesgosTabla(String query) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Riesgos!");
            return null;
        }
        System.out.println(query);
        try {
            rs = s.executeQuery(query);

            JSONArray riesgos = new JSONArray();
            try {
                int i = 0;
                while (rs.next()) {
                    JSONObject riesgo = new JSONObject();
                    riesgo.put("nombre", rs.getString(1));
                    riesgo.put("tipo", rs.getString(2));
                    riesgo.put("descripcion", rs.getString(3));
                    riesgo.put("senalizacion", rs.getString(4));
                    riesgo.put("tam", rs.getString(5));
                    riesgos.put(i++, riesgo);
                }
            } catch (Exception e) {
            }
            System.out.println("\n\n\n^RiesgosDAO: " + riesgos);
            return riesgos;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado el Riesgo");
            return null;
        }
    }

    public boolean insertarRiesgo(Riesgo rsg) {

        String query = "INSERT INTO riesgo(nombre, nombre_riesgo, descripcion, path)"
                + "VALUES ( ?, ?, ?, ?)";

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;


        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, rsg.getNombre());
            s.setString(2, rsg.getNombreRiesgo());
            s.setString(3, rsg.getDescripcion());
            s.setString(4, rsg.getSenalizacion());
            int retorno = s.executeUpdate();
            System.out.println(retorno);
            return true;

        } catch (SQLException sqle) {
            System.out.println("Error Insertando Riesgo!");
            System.out.println("SQLState: "
                    + sqle.getSQLState());
            System.out.println("SQLErrorCode: "
                    + sqle.getErrorCode());
            sqle.printStackTrace();

            return false;
        }
    }

    public boolean comprobarRiesgo(Riesgo rsg) throws SQLException {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        boolean existe = false;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Comprobando la Existencia del Riesgos!");
        }

        String query = "Select * from riesgo where nombre = '" + rsg.getNombre() + "';";
        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                System.out.print(rs.getString(1));
                existe = true;
            }
        } catch (SQLException se) {
            System.out.println("Error Consultando Riesgos DAO!");
        }
        return existe;
    }

    //Modulo 2
    public JSONArray consultarEspaciosRiesgo(String riesgo, String realizado, String factores, String equipo) {
        ConexionBD conexion = new ConexionBD();
        if (conexion.session == null) {
            return null;
        }
        Statement s = null;
        try {
            s = conexion.session.createStatement();
            String query = "SELECT u.espacio, e.coordX, e.coordY, u.riesgo, a.realizado_por, a.factores_riesgo, a.equipo_requerido FROM UBICACION_RIESGO u, ESPACIO e, ART a where (u.espacio = e.nombre_espacio)";
            if (riesgo != "") {
                query = query + " and (u.riesgo='" + riesgo + "')";
            }
            if (realizado != "") {
                query = query + " and (a.realizado_por='" + realizado + "')";
            }
            if (factores != "") {
                query = query + " and (a.factores_riesgo='" + factores + "')";
            }
            if (equipo != "") {
                query = query + " and (a.equipo_requerido='" + equipo + "')";
            }
            ResultSet rs = s.executeQuery(query);

            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);
            JSONArray riesgos = new JSONArray();
            int i = 0;
            while (rs.next()) {
                JSONObject jo2 = new JSONObject();
                jo2.put("espacio", rs.getString(1));
                jo2.put("coordX", rs.getString(2));
                jo2.put("coordY", rs.getString(3));
                jo2.put("riesgo", rs.getString(4));
                jo2.put("realizado", rs.getString(5));
                jo2.put("factores", rs.getString(6));
                jo2.put("equipo", rs.getString(7));

                riesgos.put(i++, jo2);
            }
            rs.close();
            return riesgos;
        } catch (SQLException se) {
            System.out.println("Error Consultando Riesgos!\n" + se.getMessage());
            return null;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }

    public JSONObject listRiesgos(String type) {
        ConexionBD conexion = new ConexionBD();
        if (conexion.session == null) {
            return null;
        }
        Statement s = null;
        try {
            s = conexion.session.createStatement();
            String query = "SELECT r.nombre_Riesgo, r.nombre "
                    + "FROM RIESGO r "
                    + "WHERE (r.nombre_Riesgo='" + type + "')";


            ResultSet rs = s.executeQuery(query);
            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);

            JSONObject riesgos = new JSONObject();
            int i = 0;
            while (rs.next()) {
                JSONObject jo2 = new JSONObject();
                jo2.put("riesgo", rs.getString(2));

                riesgos.put(++i + "", jo2);
            }
            rs.close();
            return riesgos;
        } catch (SQLException se) {
            System.out.println("Error Consultando Riesgos!\n" + se.getMessage());
            return null;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }

    public static boolean actualizarRiesgo(Riesgo r, String nombreAnterior) {

        String query = "UPDATE riesgo set "
                + "nombre = ?"
                + ", nombre_riesgo = ?"
                + ", descripcion = ?"
                + ", path = ?"
                + " where nombre = '" + nombreAnterior + "';";

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;


        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, r.getNombre());
            s.setString(2, r.getNombreRiesgo());
            s.setString(3, r.getDescripcion());
            s.setString(4, r.getSenalizacion());
            int retorno = s.executeUpdate();
            System.out.println(retorno);
            return true;

        } catch (SQLException sqle) {
            System.out.println("Error Actualizando Riesgo!");
            System.out.println("SQLState: "
                    + sqle.getSQLState());
            System.out.println("SQLErrorCode: "
                    + sqle.getErrorCode());
            sqle.printStackTrace();

            return false;
        }
    }
}
